第 3 步 - 定义和使用静态列表数据源

在本教程的这一步骤中,首先为数据源插件中的静态列表定义数据源,然后在 Kanzi Studio 工程中使用以从数据源获取网格列表框 (Grid List Box) 节点中项的数据。

添加功能来生成列表数据对象

在本节中,您可以添加使数据源插件可以生成列表数据对象的功能。

要添加功能来生成列表数据对象:

  1. 在 Windows 资源管理器中,从 <KanziWorkspace>/Tutorials/Data sources/Assets/Static list 目录复制 data_object_static_list.cppdata_object_static_list.hpp 文件到 <KanziWorkspace>/Tutorials/Data sources/Start/Application/src/plugin/src 目录。
    这些文件提供为静态列表创建数据对象的功能。
  2. 在 Visual Studio 的 Solution Explorer 中右键点击 XML_data_source 工程,选择“添加”>“现有项”,并在 <KanziWorkspace>/Tutorials/Data sources/Start/Application/src/plugin/src 目录中选择 data_object_static_list.cppdata_object_static_list.hpp 文件,然后点击“添加”。
  3. 在 Visual Studio 中,对 xmldatasource.cpp做如下更改:
    1. 包含 data_object_static_list.hpp 头文件。
      //提供为静态列表创建数据对象的功能。
      #include "data_object_static_list.hpp"
    2. addDataObject 函数前面创建一个函数,将内存中的 XML 结构的内容转换为静态列表数据对象中的列表项。
      //使用此函数将列表项添加到列表数据对象。
      static void addListItems(Domain* domain, DataObjectStaticListSharedPtr list, const tinyxml2::XMLElement* itemsElement)
      
      {
          for (const tinyxml2::XMLElement* child = itemsElement->FirstChildElement(); child; child = child->NextSiblingElement())
          {
              //为列表项层级创建根数据对象。
              DataObjectSharedPtr rootObject = make_shared<DataObject>(domain, "Item root");
              //递归创建列表项树。
              addDataObjectsRecursively(domain, rootObject, child);
              //将根数据对象中的第一个子项添加为列表项。放弃根对象。
              list->addItem(rootObject);
          }
      }
    3. addDataObject 函数添加一个条件,以从列表类型特性创建列表类型数据对象。
      //添加 XML 元素中的类型特性指定类型的数据对象。//从文本参数获取初始值。
      DataObjectSharedPtr addDataObject(Domain *domain, const char* type, const char* name, const char* text)
      {
      
      ...
      
          //从列表类型特性创建列表数据对象。
          else if (type && strcmp(type, "list") == 0)
          {
              object = make_shared<DataObjectStaticList>(domain, name);
          }
      
      ...
      
      }
    4. 如果列表类型中的 XML 元素名称为项,则更改 addDataObjectsRecursively 函数以添加功能,从而在列表数据对象内创建数据对象。
      替换 (Replace)
      static void addDataObjectsRecursively(Domain* domain, DataObjectSharedPtr parent, const tinyxml2::XMLElement* xml)
      {
      
      ...
      
          //遍历 XML 文件中的树,为当前 XML 元素的每个子元素添加数据对象。
          for (const tinyxml2::XMLElement* child = xml->FirstChildElement(); child; child = child->NextSiblingElement())
          {
              //递归。
              addDataObjectsRecursively(domain, object, child);
          }
      }


      static void addDataObjectsRecursively(Domain* domain, DataObjectSharedPtr parent, const tinyxml2::XMLElement* xml)
      {
      
      ...
          //检查当前数据对象的类型是否为列表。
          DataObjectStaticListSharedPtr list = dynamic_pointer_cast<DataObjectStaticList>(object);
          //遍历 XML 文件中的树,为当前 XML 元素的每个子元素添加数据对象。
          for (const tinyxml2::XMLElement* child = xml->FirstChildElement(); child; child = child->NextSiblingElement())
          {
              //如果列表类型中的 XML 元素名称为项,则在列表数据对象中创建数据对象。
              if (list && strcmp(child->Name(), "items") == 0)
              {
                  addListItems(domain, list, child);
              }
              else
              {
                  //递归。
                  addDataObjectsRecursively(domain, object, child);
              }
          }
      }
  4. Kanzi Studio 中按下 F8 退出预览 (Preview)
  5. 在 Visual Studio 的 Solution Explorer 中右键点击 XML_data_source 工程并选择构建 (Build) 来构建插件。

从数据源获取列表数据

在本节中,设置2D 网格列表框 (Grid List Box 2D) 节点来从插件根据数据源生成的列表数据对象中获取项数据。

要从数据源获取列表数据:

  1. 数据源 (Data Sources) 窗口中,点击Cluster 数据源旁的 并将XML Data Source File 属性设为 ClusterWithList.xml 文件。ClusterWithList.xml 文件包含在数据源插件工程的 Visual Studio 解决方案中。您可以在 Application/bin 目录中找到该文件。
    Cluster.xml 文件中包含的数据外,ClusterWithList.xml 文件还包含列表项的数据。
  2. 点击Cluster 数据源旁的 ClusterWithList.xml 文件的内容创建数据对象。
  3. 工程 (Project) 中选择 网格列表框 (Grid List Box) 节点 Contacts > ContactsList,并在 属性 (Properties)中添加 项模板 (Item Template) 属性,并将其设置为 ContactItem 预设件。
    使用项模板 (Item Template) 属性设置您想要网格列表框 (Grid List Box) 节点用于其列表中项的预设件模板。
  4. 数据源 (Data Sources) 窗口拖动 Cluster > contacts 列表数据对象到 ContactsList 节点的 项源 (Items Source) 属性。
    通过项源 (Items Source) 属性,您可以设置数据对象,使其为网格列表框 (Grid List Box) 节点中的列表项提供数据。
  5. 预设件 (Prefabs)ContactItem 预设件中选择 ContactFirstName 节点,从数据源 (Data Sources) 窗口拖动 Cluster > contacts > Item > contact > firstname 数据对象,并放在属性 (Properties) 中的文本 (Text) 属性上。
  6. ContactLastNameContactNumber 重复上一步骤:


    联系人列表现在接收来自 ClusterWithList.xml 数据源的数据。使用文本编辑器来更改 ClusterWithList.xml 文件中的值,保存 ClusterWithList.xml 文件,Kanzi Studio 预览 (Preview)数据源 (Data Sources) 窗口会显示更新的数据对象及其值。


< 上一步

接下来该做什么?

在本教程中,您学习了如何定义 XML 数据源以及如何在 Kanzi Studio 中使用该数据源中的数据向 Kanzi 应用程序提供数据。现在您可以:

另请参阅

要详细了解有关 Kanzi 中数据源的信息,请参阅数据源